Fix setup of coding-systems on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Sun, 5 Jan 2025 05:56:27 +0000 (07:56 +0200)
committerEli Zaretskii <eliz@gnu.org>
Wed, 26 Feb 2025 13:12:42 +0000 (15:12 +0200)
* src/emacs.c (main) [HAVE_PDUMPER] [WINDOWSNT]: Call
'w32_init_file_name_codepage' again after loading the pdumper
file.
* src/w32.c (w32_init_file_name_codepage) [HAVE_PDUMPER]:
Reinitialize additional variables.  (Bug#75207)

(cherry picked from commit cc5cd4de93d1e5ba205cbf0c370aef4559bc342b)

src/emacs.c
src/w32.c

index 1e07b2c863866992e89aeb8e0fe3ee088d8cc080..1beb295c9b1ff88fce913922d8ce77035a6c4558 100644 (file)
@@ -1430,7 +1430,18 @@ main (int argc, char **argv)
 
 #ifdef HAVE_PDUMPER
   if (attempt_load_pdump)
-    initial_emacs_executable = load_pdump (argc, argv, dump_file);
+    {
+      initial_emacs_executable = load_pdump (argc, argv, dump_file);
+#ifdef WINDOWSNT
+  /* Reinitialize the codepage for file names, needed to decode
+     non-ASCII file names during startup.  This is needed because
+     loading the pdumper file above assigns to those variables values
+     from the dump stage, which might be incorrect, if dumping was done
+     on a different system.  */
+      if (dumped_with_pdumper_p ())
+       w32_init_file_name_codepage ();
+#endif
+    }
 #else
   ptrdiff_t bufsize;
   initial_emacs_executable = find_emacs_executable (argv[0], &bufsize);
index 1135462ba8c30bc7e90dd89de312eb9fb9a4647f..4107751951cef06662e6b52597a1b4f7192906fa 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -1685,6 +1685,19 @@ w32_init_file_name_codepage (void)
 {
   file_name_codepage = CP_ACP;
   w32_ansi_code_page = CP_ACP;
+#ifdef HAVE_PDUMPER
+  /* If we were dumped with pdumper, this function will be called after
+     loading the pdumper file, and needs to reset the following
+     variables that come from the dump stage, which could be on a
+     different system with different default codepages.  Then, the
+     correct value of w32-ansi-code-page will be assigned by
+     globals_of_w32fns, which is called from 'main'.  Until that call
+     happens, w32-ansi-code-page will have the value of CP_ACP, which
+     stands for the default ANSI codepage.  The other variables will be
+     computed by codepage_for_filenames below.  */
+  Vdefault_file_name_coding_system = Qnil;
+  Vfile_name_coding_system = Qnil;
+#endif
 }
 
 /* Produce a Windows ANSI codepage suitable for encoding file names.